package intermouse;

/**
 * A pályán található elemek ősosztálya.
 * 
 * @author Sőre András
 * @author Bendefy Zoltán
 * 
 * @version 1.0
 * @since 2013-03-24
 */

public class FieldObject {

	/**
	 * Referencia az elem mezőjére.
	 */
	protected Field field;

	protected FieldTypes fieldType;
	
	/**
	 * Ha igazra van állítva, akkor az objektum törlésre kerül a következő
	 * körben.
	 */
	protected boolean dead;

	FieldObject() {
		dead = false;
		fieldType = FieldTypes.FieldObject;
	}
	
	public FieldTypes getFieldType()
	{
		return fieldType;
	}

	public Field getField() {
		Logger.printToConsole(">> FieldObject.getField() : Field");
		Logger.printToConsole("<< return");
		return field;
	}

	public void setField(Field fff) {
		Logger.printToConsole(">> FieldObject.setField(Field) : void");
		if (this.field != null)
		{
 			this.field.deleteFieldObject(this);
 			this.field.setDirty();
		}
		fff.addFieldObject(this);
		fff.setDirty();
		this.field = fff;
		Logger.printToConsole("<< return");
	}

	/**
	 * Beállítja a dead kapcsolót.
	 */
	void setDead(boolean dead) {
		Logger.printToConsole(">> FieldObject.setDead(boolean) : void");
		this.dead = dead;
		this.field.setDirty();
		Logger.printToConsole("<< return");
	}

	/**
	 * Visszaadja, hogy az objektum halott-e.
	 */
	boolean getDead() {
		Logger.printToConsole(">> FieldObject.getDead() : boolean");
		Logger.printToConsole("<< return");
		return dead;
	}

	/**
	 * @return Mindig false-t ad vissza, a hangya felüldefiniálja mert az
	 *         támadható.
	 */
	boolean attack() {
		Logger.printToConsole(">> FieldObject.attack() : bool");
		Logger.printToConsole("<< return");
		return false;
	}

	/**
	 * @param ant
	 * @return megadja a paraméterként kapott hangyának hogy a field mezőre
	 *         léphet-e.
	 */
	boolean canStep(Ant ant) {
		Logger.printToConsole(">> FieldObject.canStep(Ant) : bool");
		Logger.printToConsole("<< return");
		return true;
	}

	/**
	 * @param param
	 * @return megadja a paraméterként kapott hangyászsünnek hogy a field mezőre
	 *         léphet-e.
	 */
	boolean canStep(AntEater antEater, int direction) {
		Logger.printToConsole(">> FieldObject.canStep(AntEater, int) : bool");
		Logger.printToConsole("<< return");
		return true;
	}

	/**
	 * @param param
	 * @return megadja a paraméterként kapott kőnek hogy a field mezőre
	 *         léphet-e.
	 */
	boolean canStep(Stone stone, boolean isFirst, int direction) {
		Logger.printToConsole(">> FieldObject.canStep(Stone, boolean, int) : bool");
		Logger.printToConsole("<< return");
		return true;
	}

	/**
	 * @return megadja hogy az objektum étel-e, Foodokra igazat ad vissza.
	 */
	boolean isFood() {
		Logger.printToConsole(">> FieldObject.isFood() : bool");
		Logger.printToConsole("<< return");
		return false;
	}
}
